package com.lanhe.common.utils.sms;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@Slf4j
public class SmsUtil {

	// 签名
	@Value("兰禾教育")
	private String signName;
	// 模板
	@Value("${lanhe.sms.templateCode}")
	private String templateCode;//短信模板的code

	// 阿里云短信配置信息
	@Value("${lanhe.sms.accessKeyId}")
	private String accessKeyId;

	@Value("${lanhe.sms.accessKeySecret}")
	private String accessKeySecret;

	@Value("${lanhe.sms.REGION_ID}")
	private String REGION_ID;//服务地区,选择离自己近的就好（像我是杭州，就填cn-hangzhou）

	@Value("${lanhe.sms.PRODUCT}")
	private String PRODUCT;//短信API产品名称（固定值，就填Dysmsapi）

	@Value("${lanhe.sms.DOMAIN}")
	private String DOMAIN;//短信API产品的域名（固定值，就填dysmsapi.aliyuncs.com）

	/**
	 * 发送短信通知
	 *
	 * @param mobile 手机号
	 * @param code   验证码
	 * @return 执行结果
	 */
	public boolean sendSMS(String mobile, String code) {

		try {

			IClientProfile profile = DefaultProfile.getProfile(REGION_ID, accessKeyId, accessKeySecret);
			DefaultProfile.addEndpoint(REGION_ID, REGION_ID, PRODUCT, DOMAIN);

			IAcsClient acsClient = new DefaultAcsClient(profile);

			SendSmsRequest request = new SendSmsRequest();
			request.setMethod(MethodType.POST);

			// 手机号可以单个也可以多个（多个用逗号隔开，如：15*******13,13*******27,17*******56）
			request.setPhoneNumbers(mobile);
			request.setSignName(signName);
			request.setTemplateCode(templateCode);

            /*  例如签名内容为：某某公司
            例如模板内容为：亲爱的同事,很高兴的通知您，您抽中了由领导${userName}派发的大饼奖励${money}元，请及时找财务领取！
            变量属性：userName-其他；money-其他；
            则短信内容为：【某某公司】 亲爱的同事,很高兴的通知您，您抽中了由领导${userName}派发的大饼奖励${money}元，请及时找财务领取！*/
			request.setTemplateParam("{\"code\":\"" + code + "\"}");

			SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
			if ((sendSmsResponse.getCode() != null) && (sendSmsResponse.getCode().equals("OK"))) {
				log.info("发送成功,code:" + sendSmsResponse.getCode());
				return true;
			} else {
				log.info("发送失败,code:" + sendSmsResponse.getCode());
				return false;
			}
		} catch (Exception e) {
			log.error("发送失败,系统错误！", e);
			return false;
		}
	}

	/**
	 * 获取逗号分隔的拼接字符串
	 *
	 * @param str 用于拼接的字符串集合
	 * @return String
	 */
	public static String getSplitString(List<String> str) {
		StringBuilder newS = new StringBuilder();
		if (str != null && str.size() > 0) {
			for (String s : str) {
				newS.append(s).append(",");
			}
		}
		if (newS.length() > 0)
			newS.deleteCharAt(newS.length() - 1);// 删除最后一个多余的逗号
		return newS.toString();
	}


}

